From 7734234e956f0d259f2adb4bd994e0d887fa579c Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Fri, 11 Jun 2010 15:19:49 +0100 Subject: [PATCH] x86: Clean up efer/ler macros after MSR changes. Move them out of a header file and make the macros proper functions again. Signed-off-by: Keir Fraser --- xen/arch/x86/domain.c | 1 - xen/arch/x86/traps.c | 24 ++++++++++++++++++++++++ xen/include/asm-x86/msr.h | 17 ++--------------- xen/include/xen/cpuidle.h | 2 +- 4 files changed, 27 insertions(+), 17 deletions(-) diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c index 4dc081fa03..d766ab4890 100644 --- a/xen/arch/x86/domain.c +++ b/xen/arch/x86/domain.c @@ -58,7 +58,6 @@ #endif DEFINE_PER_CPU(struct vcpu *, curr_vcpu); -DEFINE_PER_CPU(u64, efer); DEFINE_PER_CPU(unsigned long, cr4); static void default_idle(void); diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c index bfc4f248ce..e30b1528d7 100644 --- a/xen/arch/x86/traps.c +++ b/xen/arch/x86/traps.c @@ -81,6 +81,8 @@ static char __read_mostly opt_nmi[10] = "fatal"; #endif string_param("nmi", opt_nmi); +DEFINE_PER_CPU(u64, efer); + DEFINE_PER_CPU_READ_MOSTLY(u32, ler_msr); DEFINE_PER_CPU_READ_MOSTLY(struct desc_struct *, gdt_table); @@ -3113,6 +3115,28 @@ asmlinkage void do_device_not_available(struct cpu_user_regs *regs) return; } +u64 read_efer(void) +{ + return this_cpu(efer); +} + +void write_efer(u64 val) +{ + this_cpu(efer) = val; + wrmsrl(MSR_EFER, val); +} + +static void ler_enable(void) +{ + u64 debugctl; + + if ( !this_cpu(ler_msr) ) + return; + + rdmsrl(MSR_IA32_DEBUGCTLMSR, debugctl); + wrmsrl(MSR_IA32_DEBUGCTLMSR, debugctl | 1); +} + asmlinkage void do_debug(struct cpu_user_regs *regs) { struct vcpu *v = current; diff --git a/xen/include/asm-x86/msr.h b/xen/include/asm-x86/msr.h index 26fded68c0..820a2528e6 100644 --- a/xen/include/asm-x86/msr.h +++ b/xen/include/asm-x86/msr.h @@ -102,24 +102,11 @@ static inline int wrmsr_safe(unsigned int msr, uint64_t val) DECLARE_PER_CPU(u64, efer); - -#define read_efer() this_cpu(efer) - -#define write_efer(val) do { \ - this_cpu(efer) = val; \ - wrmsrl(MSR_EFER, val); \ -} while(0) +u64 read_efer(void); +void write_efer(u64 val); DECLARE_PER_CPU(u32, ler_msr); -#define ler_enable() do { \ - u64 debugctl; \ - if ( !this_cpu(ler_msr) ) \ - return; \ - rdmsrl(MSR_IA32_DEBUGCTLMSR, debugctl); \ - wrmsrl(MSR_IA32_DEBUGCTLMSR, debugctl | 1); \ -} while(0) - #endif /* !__ASSEMBLY__ */ #endif /* __ASM_MSR_H */ diff --git a/xen/include/xen/cpuidle.h b/xen/include/xen/cpuidle.h index 0b3b3fec27..cf73341bf5 100644 --- a/xen/include/xen/cpuidle.h +++ b/xen/include/xen/cpuidle.h @@ -27,7 +27,7 @@ #ifndef _XEN_CPUIDLE_H #define _XEN_CPUIDLE_H -#include +#include #define ACPI_PROCESSOR_MAX_POWER 8 #define CPUIDLE_NAME_LEN 16 -- 2.30.2